package com.yms.spring.bean;

import org.springframework.beans.factory.support.DefaultListableBeanFactory;
import org.springframework.beans.factory.xml.XmlBeanDefinitionReader;
import org.springframework.context.ApplicationContext;
import org.springframework.core.io.ClassPathResource;

import java.util.Base64;

/**
 * @version : 1.0
 * @author: yangmingsong
 * @date: 2022/8/9-08-09-14:54
 * @description: spring5-test
 */
public class BeanFactor {

    private  static DefaultListableBeanFactory factory;

    public static DefaultListableBeanFactory  createBean(){
        //创建ClassPathResource对象，BeanDefinition的定义信息
        if(factory == null){
            ClassPathResource resource = new ClassPathResource("bean1.xml");

//创建一个DefaultListableBeanFactory对象，XmlBeanFactory 继承了这个类
            DefaultListableBeanFactory f = new DefaultListableBeanFactory();

/*创建一个载入IOC容器配置文件的读取器，这里使用XMLBeanFactory中使用的XmlBeanDefinitionReader读取器
来载入XML文件形式的BeanDefinition，通过一个回到配置给BeanFactory*/
            XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(f);

/*从定义好的资源位置读入配置信息，具体的解析过程有XmlBeanDefinitionReader来完成，
完成整个载入和注册Bean定义后需要的IOC容器就建立起来了，这个时候就可以直接使用IOC容器了*/
            reader.loadBeanDefinitions(resource);
            factory = f;
        }
        return factory;

    }

    public static <T> T getBean(Class<T> c){
        return factory.getBean(c);
    }

    public static Object getBean(String name){
        return factory.getBean(name);
    }

  static {
        if (factory ==null){
            createBean();
        }
      Object user = factory.getBean("user");
      System.out.println(user);
  }

}
